Итак, чтобы писать линейные программы, вводящие данные, проводящие вычисления и выводящие результат, не хватает пустяка. А именно вычислений ;).
Операторы и приоритет
Язык С поддерживает обычные математические операторы: +, -, *, /. Вычисления выполняются по обычным математическим правилам, с учетом приоритета (то есть умножение и деление выполняются в первую очередь).
Присваиванием мы уже пользовались, так что
y=3+2*2
выглядит вполне понятно.
Если естественный порядок вас не устраивает, всегда можно добавить скобки:
y=(3+2)*2.
Кроме четырех математических операций, в программах часто встречается оператор %. В языке С это оператор взятия остатка от деления.
5%2=>1, 6%2=>0, 75%10=>5
Он определен только для целых и имеет приоритет как у умножения и деления.
Сокращенная запись операторов
В языке С есть несколько уменьшающих писанину сокращений.
Во-первых, это операции инкремента и декремента (увеличение и уменьшение на 1).
x++ означает x=x+1,
x-- означает x=x-1.
Работает только для целых чисел.
(На самом деле можно записать x++, а можно ++x. В том и в том случае x увеличится. Разница проявится, только если мы собираемся использовать значение оператора в выражении.)
Во-вторых, это комбинированные операторы. Так, вместо
x=x+2 можно записать x+=2
Этот фокус работает со всеми операторами (и не только на целых числах).
Преобразование типов при вычислениях
В предыдущей части мы столкнулись со случаем
45/30 => 1.
В общем случае, если один из элементов выражения вещественный, то и результат будет иметь вещественный тип. В противном случае, результат будет целый (как и вышло у нас).
double x;
x=1/3;
результат деления нацело – ноль, он и запишется в переменную x.
Если мы хотим получить одну третью, нужно чтобы хотя бы одна часть выражения была вещественной:
x=1/3.0;
Если же тип переменной, куда записывается вещественный результат, целый, то дробная часть отбрасывается. Так, для
int x;
x=1/3.0;
в результате вычисления получается вещественное число, но оно усекается до целого при присваивании. В результате – ноль.
Если результат слишком велик для представления целым числом, возникнет ошибка - переполнение.
Часто возникающие вопросы
Осталось получить ответ на несколько вопросов.
Как возвести число в степень?
Как записать операцию взятия квадратного корня?
Где взять синус и прочие элементарные функции?
Для выполнения всех этих действий требуется библиотека math.h.
Для использования ее нужно подключить (#include <math.h>), а дальше:
1) Для возведения в степень служит функция pow
будет pow(2.0,3.0)
(все математические функции принимают вещественные аргументы и выдают вещественный результат).
2) Квадратный корень - функция sqrt
sqrt(4.0)=>2.0
3) Синус и прочие функции нужно искать там же: sin, cos, tan (это тангенс), exp, log (это натуральный логарифм)...
Нужно иметь в виду, что тригонометрические функции принимают угол не в градусах, а в радианах. Полная окружность - 360 градусов, или 2Пи радиан. Число Пи определено там же как M_PI, правда, чтобы его можно было использовать, нужно перед
#include <math.h>
добавить
#define _USE_MATH_DEFINES
Тогда, для вычисления синуса 15 градусов надо будет записать
y=sin(15.0*M_PI/180).
Часто спрашиваемые вопросы
В заключение - парочка часто встречающихся (на экзамене) вопросов.
1) Как посчитать
pow(sin(x),2.0)
2) Как получить корень 3й (7й, любой другой) степени?
Операторы и приоритет
Язык С поддерживает обычные математические операторы: +, -, *, /. Вычисления выполняются по обычным математическим правилам, с учетом приоритета (то есть умножение и деление выполняются в первую очередь).Присваиванием мы уже пользовались, так что
- y=3+2*2
выглядит вполне понятно.Если естественный порядок вас не устраивает, всегда можно добавить скобки:
- y=(3+2)*2.
Кроме четырех математических операций, в программах часто встречается оператор %. В языке С это оператор взятия остатка от деления.- 5%2=>1, 6%2=>0, 75%10=>5
Он определен только для целых и имеет приоритет как у умножения и деления.Сокращенная запись операторов
В языке С есть несколько уменьшающих писанину сокращений.Во-первых, это операции инкремента и декремента (увеличение и уменьшение на 1).
- x++ означает x=x+1,
- x-- означает x=x-1.
Работает только для целых чисел.(На самом деле можно записать x++, а можно ++x. В том и в том случае x увеличится. Разница проявится, только если мы собираемся использовать значение оператора в выражении.)
Во-вторых, это комбинированные операторы. Так, вместо
- x=x+2 можно записать x+=2
Этот фокус работает со всеми операторами (и не только на целых числах).Преобразование типов при вычислениях
В предыдущей части мы столкнулись со случаем- 45/30 => 1.
В общем случае, если один из элементов выражения вещественный, то и результат будет иметь вещественный тип. В противном случае, результат будет целый (как и вышло у нас).- double x;
- x=1/3;
результат деления нацело – ноль, он и запишется в переменную x.Если мы хотим получить одну третью, нужно чтобы хотя бы одна часть выражения была вещественной:
- x=1/3.0;
Если же тип переменной, куда записывается вещественный результат, целый, то дробная часть отбрасывается. Так, для- int x;
- x=1/3.0;
в результате вычисления получается вещественное число, но оно усекается до целого при присваивании. В результате – ноль.Если результат слишком велик для представления целым числом, возникнет ошибка - переполнение.
Часто возникающие вопросы
Осталось получить ответ на несколько вопросов.Для выполнения всех этих действий требуется библиотека math.h.
Для использования ее нужно подключить (#include <math.h>), а дальше:
1) Для возведения в степень служит функция pow
- будет pow(2.0,3.0)
(все математические функции принимают вещественные аргументы и выдают вещественный результат).2) Квадратный корень - функция sqrt
- sqrt(4.0)=>2.0
3) Синус и прочие функции нужно искать там же: sin, cos, tan (это тангенс), exp, log (это натуральный логарифм)...Нужно иметь в виду, что тригонометрические функции принимают угол не в градусах, а в радианах. Полная окружность - 360 градусов, или 2Пи радиан. Число Пи определено там же как M_PI, правда, чтобы его можно было использовать, нужно перед
- #include <math.h>
добавить- #define _USE_MATH_DEFINES
Тогда, для вычисления синуса 15 градусов надо будет записатьЧасто спрашиваемые вопросы
В заключение - парочка часто встречающихся (на экзамене) вопросов.1) Как посчитать
- pow(sin(x),2.0)
2) Как получить корень 3й (7й, любой другой) степени?